<template>
    <view style="margin: -40rpx -54rpx">
        <uni-card :title="file.originalFilename" :sub-title="file.size+'B'" :thumbnail="iconif" @click="onClick"
        style="height: 200rpx;width: 360rpx">
          <text style="">{{formatDateTime(file.time,'YYYY-MM-DD HH:mm:ss')}}</text>
        </uni-card>
    </view>
</template>

<script>
// import { BasicImage } from '../../basic';
// 图片
import BasicImage from '../../basic/basic-image/basic-image.vue';
import {Group, isEmpty, showToast} from '../../../utils/index.js';
import { chatGuessProblem } from '../../../common/api.js';
import {formatDateTime} from "@/utils/utils";
import {address} from "@/config/conf";
export default {
    name: 'Files',
    components: { BasicImage },
    emits: ['click'],
    props: {
        // 优惠券列表
        items: {
            type: Array,
            default: () => [
                {
                    id: 1,
                    price: 3000,
                    url: 'https://img.alicdn.com/bao/uploaded/i3/2055770076/O1CN01jEkYK61CQr2Na3EO7_!!0-saturn_solar.jpg',
                    name: '商品名称商品名称',
                    desc: '商品介绍商品介绍商品介绍商品介绍'
                },
                {
                    id: 2,
                    price: 3000,
                    url: 'https://img.alicdn.com/imgextra/i3/2187216215/O1CN01sEeK2J1vmWYkhJGxP_!!2187216215-0-alimamacc.jpg',
                    name: '商品名称商品名称',
                    desc: '商品介绍商品介绍商品介绍商品介绍'
                },
                {
                    id: 3,
                    price: 3000,
                    url: 'https://img.alicdn.com/imgextra/i4/2187216215/O1CN01wJNoxl1vmWYmoUyrH_!!2187216215-0-alimamacc.jpg',
                    name: '商品名称商品名称',
                    desc: '商品介绍商品介绍商品介绍商品介绍'
                }
            ]
        },
      file: {
        type: Object,
        default: () =>{}
      },
        // 数据键值
        labelObj: {
            type: Array,
            default: () => ['url', 'name', 'desc', 'price']
        }
    },
    data() {
        return {};
    },
  computed: {
    iconif() {
      if (this.file.originalFilename.endsWith('.txt')) {
        return '/static/txt.svg'
      }else if(this.file.originalFilename.endsWith('.xlsx')||this.file.originalFilename.endsWith('.xls')) {
        return '/static/excel.svg'
      }else if(this.file.originalFilename.endsWith('.word')) {
        return '/static/word.svg'
      } else {
        return '/static/file.svg'
      }
    },
  },
  methods: {
    formatDateTime,
    isEmpty,
    onClick() {
      if (!this.file.fileName) {
        showToast('文件路径不存在');
        return;
      }

      // 唯一标识当前文件（用fileName作为key）
      const fileKey = this.file.fileName;

      // 步骤1：先从本地存储查找是否有该文件的保存记录
      uni.getStorage({
        key: 'savedFilesMap',
        success: (storageRes) => {
          const savedFilesMap = storageRes.data || {};
          const savedFilePath = savedFilesMap[fileKey]; // 从记录中获取保存路径

          if (savedFilePath) {
            // 步骤2：验证文件是否还存在（防止文件被删除但记录还在）
            uni.getSavedFileInfo({
              filePath: savedFilePath,
              success: () => {
                // 文件存在，直接打开
                this.openFile(savedFilePath);
              },
              fail: () => {
                // 文件不存在，删除无效记录并重新下载
                delete savedFilesMap[fileKey];
                uni.setStorage({ key: 'savedFilesMap', data: savedFilesMap });
                this.downloadFile();
              }
            });
          } else {
            // 无记录，直接下载
            this.downloadFile();
          }
        },
        fail: () => {
          // 本地存储无记录，直接下载
          this.downloadFile();
        }
      });
    },

    // 下载文件并保存
    downloadFile() {
      const fileKey = this.file.fileName;
      const fileUrl = address + '/agentapi/common/oss/download?resource=/' + fileKey;

      uni.showLoading({ title: '下载中...', mask: true });

      uni.downloadFile({
        url: fileUrl,
        success: (res) => {
          if (res.statusCode === 200) {
            // 下载成功，保存文件
            uni.saveFile({
              tempFilePath: res.tempFilePath,
              success: (saveRes) => {
                uni.hideLoading();
                showToast('下载成功');

                // 保存文件路径到本地存储（建立fileName和本地路径的映射）
                uni.getStorage({
                  key: 'savedFilesMap',
                  success: (storageRes) => {
                    const savedFilesMap = storageRes.data || {};
                    savedFilesMap[fileKey] = saveRes.savedFilePath; // 记录映射关系
                    uni.setStorage({ key: 'savedFilesMap', data: savedFilesMap });
                  },
                  fail: () => {
                    // 首次存储，创建映射对象
                    uni.setStorage({
                      key: 'savedFilesMap',
                      data: { [fileKey]: saveRes.savedFilePath }
                    });
                  }
                });

                // 提示打开
                this.showOpenConfirm(saveRes.savedFilePath);
              },
              fail: (err) => {
                uni.hideLoading();
                console.error('保存文件失败', err);
                showToast('保存文件失败');
              }
            });
          } else {
            uni.hideLoading();
            console.error('下载失败，状态码：', res.statusCode);
            showToast('下载失败');
          }
        },
        fail: (err) => {
          uni.hideLoading();
          console.error('下载失败', err);
          showToast('下载失败，请检查网络连接');
        }
      });
    },

    // 验证文件存在后打开
    openFile(filePath) {
      uni.openDocument({
        filePath: filePath,
        success: () => {
          console.log('文件打开成功');
        },
        fail: (err) => {
          console.error('文件打开失败', err);
          showToast('文件打开失败，可能已被删除');

          // 如果打开失败，删除无效记录（下次重新下载）
          const fileKey = this.file.fileName;
          uni.getStorage({
            key: 'savedFilesMap',
            success: (storageRes) => {
              const savedFilesMap = storageRes.data || {};
              delete savedFilesMap[fileKey];
              uni.setStorage({ key: 'savedFilesMap', data: savedFilesMap });
            }
          });
        }
      });
    },

    // 显示打开确认弹窗
    showOpenConfirm(filePath) {
      uni.showModal({
        title: '提示',
        content: '文件已下载，是否打开？',
        success: (modalRes) => {
          if (modalRes.confirm) {
            this.openFile(filePath);
          }
        }
      });
    }
  }
};
</script>

<style lang="scss" scoped>
</style>
